/**
 * Generali Solutions d'assurances - Tous droits réservés &copy; 2007 - 2010
 */
package fr.generali.accueilclient.tigre.consultationsolde.services.impl;

import javax.xml.ws.WebServiceException;

import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

import fr.generali.accueilclient.commun.exception.AccueilClientBusinessException;
import fr.generali.accueilclient.commun.exception.AccueilClientTechnicalException;
import fr.generali.accueilclient.tigre.consultationsolde.om.ICritereSelectionSolde;
import fr.generali.accueilclient.tigre.consultationsolde.om.IEnteteConsultationSolde;
import fr.generali.accueilclient.tigre.consultationsolde.services.IConsultationSoldeService;
import fr.generali.accueilclient.utils.code.error.ConsultationSoldeCodeError;
import fr.generali.encaisscomptatiersdecaiss.encaissement.tigre.consultationsolde.services.IConsultationSolde;
import fr.generali.encaisscomptatiersdecaiss.encaissement.tigre.consultationsolde.entetes.DtoEnteteConsultationSoldeElt;

/**
 * @author Holmes Kelly
 */
@Service
public class ConsultationSoldeService implements IConsultationSoldeService {
    
    /**
     * LOGGER
     */
    private static final Logger LOGGER = LoggerFactory.getLogger(ConsultationSoldeService.class);

    /**
     * Appel Web Service Consultation Solde
     */
    @Autowired
    @Qualifier("consultationSoldeWebService")
    private IConsultationSolde consultationSoldeWebService;

    /**
     * Appel Mapper
     */
    @Autowired
    @Qualifier("consultationSoldeMapper")
    private ConsultationSoldeMapper consultationSoldeMapper;

    /**
     * {@inheritDoc}
     */
    public IEnteteConsultationSolde consulterSolde(ICritereSelectionSolde critereSelectionSolde)
                    throws AccueilClientBusinessException {

        IEnteteConsultationSolde enteteConsultationSolde = null;

        if (critereSelectionSolde != null) {

            String codeRetour = null;

            DtoEnteteConsultationSoldeElt dtoEnteteConsultationSoldeElt = null;
            try {
                dtoEnteteConsultationSoldeElt =
                                consultationSoldeWebService.consulterSolde(consultationSoldeMapper
                                                .mapperDtoCritereSelectionSoldeElt(critereSelectionSolde));

                codeRetour = dtoEnteteConsultationSoldeElt.getCodeRetour();
            } catch (WebServiceException e) {
                LOGGER.debug(e.getMessage());
                throw new AccueilClientTechnicalException(e.getMessage());
            }

            if (StringUtils.isNotBlank(codeRetour)
                            && !StringUtils.equals(codeRetour, ConsultationSoldeCodeError.CODE_ERROR_00.getCode())) {

                LOGGER.debug(ConsultationSoldeCodeError.getMessageErrorServiceParCode(codeRetour));
                throw new AccueilClientBusinessException(
                                ConsultationSoldeCodeError.getMessageErrorServiceParCode(codeRetour), codeRetour);
            }

            if (dtoEnteteConsultationSoldeElt != null) {
                enteteConsultationSolde =
                                consultationSoldeMapper.mapperEnteteConsultationSolde(dtoEnteteConsultationSoldeElt);
            }

        }

        return enteteConsultationSolde;
    }
}
